/**
 * 
 */
package com.desksoft.ecommerce.helper;

import static com.google.common.base.Preconditions.checkNotNull;

import java.text.MessageFormat;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.desksoft.ecommerce.service.interf.logistics.IMessageService;
import com.desksoft.ecommerce.util.holder.ApplicationContextHolder;
import com.desksoft.ecommerce.util.result.ServiceResult;
import com.desksoft.ecommerce.vo.logistics.MessageVO;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;

/***************************************
 * <pre>
 * 版权所有：杭州迪科软件 保留所有权利
 * 创建日期: Aug 5, 2011 11:12:25 AM
 * 创建作者：yejw
 * 文件名称：MessageUtil.java
 * 版本：
 * 功能：
 * 最后修改时间：Aug 5, 2011 11:12:25 AM
 * 修改记录：
 * </pre>
 *****************************************/

public class MessageHelper {

	protected final static Log log = LogFactory.getLog(MessageHelper.class);
	private static List<MessageVO> messages = null;

	static {
		messages = intlMsgs();
	}

	private MessageHelper() {
	}

	/**
	 * 根据信息ID取信息提示内容
	 * 
	 * @param messageCode
	 *            信息ID
	 * @param args
	 *            参数/参数数组
	 * @return
	 */
	public static String get(String messageCode, Object... args) {
		checkNotNull(messageCode);
		
		MessageVO message = getMessage(messageCode);
		checkNotNull(message);
		
		return MessageFormat.format(message.getContent(), args);
	}

	/**
	 * 根据信息ID取信息提示内容
	 * 
	 * @param messageCode
	 *            信息ID
	 * @param args
	 *            参数列表
	 * @return
	 */
	public static String get(String messageCode, List<Object> args) {
		return get(messageCode, args.toArray());
	}

	/**
	 * 根据信息ID取信息
	 * 
	 * @param messageCode
	 *            信息ID
	 * @return
	 */
	public static MessageVO getMessage(final String messageCode) {
		checkNotNull(messages);
		checkNotNull(messageCode);
		
		return Iterators.find(messages.iterator(), new Predicate<MessageVO>() {

			@Override
			public boolean apply(MessageVO input) {
				return messageCode.equalsIgnoreCase(input.getId());
			}
			
		});
	}
	
	/**
	 * 提示信息列表
	 * @return
	 */
	public static List<MessageVO> getMessages() {
		return messages;
	}

	/**
	 * 初始化提示信息列表
	 * 
	 * @return
	 */
	private static List<MessageVO> intlMsgs() {
		IMessageService messageService = (IMessageService) ApplicationContextHolder.getBean("messageService");
		checkNotNull(messageService);
		
		ServiceResult<List<MessageVO>> servResult = messageService.getMessages();
		if (!servResult.isSuccess()) {
			log.error("Failed to initialize the message resources!");
			return null;
		}

		return servResult.getResult();
	}

}
